#include <stdio.h>    // 提供输入输出函数，如 printf、scanf、fgets
#include <stdlib.h>   // 提供通用工具函数，如 malloc、free
#include <string.h>   // 提供字符串处理函数，如 strcmp、sscanf

#define MAX_SIZE 2000 // 定义队列的最大长度

int main() {
    // step 1# 读取操作次数
    int number;  
    scanf("%d\n", &number);  // 读取操作对数

    // step 2# 初始化循环队列和相关变量
    int queue[MAX_SIZE];     // 循环队列数组
    int front = 0;           // 队首指针
    int rear = 0;            // 队尾指针
    int value;               // 存储操作值
    char operation[10];      // 存储操作类型（head、tail、remove）
    int isOrder = 1;         // 是否为有序状态标志（1表示有序，0表示无序）
    int count = 0;           // 记录无序移除操作的次数

    // step 3# 处理每一组操作（2n行输入）
    for(int i = 0; i < number * 2; i++) {
        char input[20];  // 缓冲读取每行输入
        fgets(input, sizeof(input), stdin);  // 读取整行
        sscanf(input, "%s %*s %d", operation, &value);  // 提取操作和数值

        // step 4# 插入到队首（head）
        if (strcmp(operation, "head") == 0) {
            if (front != rear) isOrder = 0;  // 队列不空则标记为无序
            queue[front] = value;            // 插入值
            front = (front -1 + MAX_SIZE) % MAX_SIZE;  // 队首左移

        // step 5# 插入到队尾（tail）
        } else if (strcmp(operation, "tail") == 0) {
            rear = (rear + 1 + MAX_SIZE) % MAX_SIZE;  // 队尾右移
            queue[rear] = value;                      // 插入值

        // step 6# 移除操作（remove）
        } else {
            if (front == rear) continue;  // 队列为空则跳过
            else if (isOrder == 0) count++;  // 若当前无序则计数
            isOrder = 1;  // 重置为有序状态
        }
    }

    // step 7# 输出无序移除操作次数
    printf("%d\n", count);

    return 0;
}
